home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / Source / MSG Demo 1.2 Source / MSG Demo ƒ / MSG Shell ƒ / msg menus.c < prev    next >
Text File  |  1993-11-10  |  6KB  |  299 lines

  1. /**********************************************************************\
  2.  
  3. File:        msg menus.c
  4.  
  5. Purpose:    This module handles menu selections, including selection
  6.             of dimmed menu items (hehe).
  7.  
  8.  
  9. MSG Demo -- graphic effects demonstration program
  10. Copyright (C) 1992-3 Mark Pilgrim & Dave Blumenthal
  11.  
  12. This program is free software; you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation; either version 2 of the License, or
  15. (at your option) any later version.
  16.  
  17. This program is distributed in the hope that it will be useful,
  18. but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. GNU General Public License for more details.
  21.  
  22. You should have received a copy of the GNU General Public License
  23. along with this program in a file named "GNU General Public License".
  24. If not, write to the Free Software Foundation, 675 Mass Ave,
  25. Cambridge, MA 02139, USA.
  26.  
  27. \**********************************************************************/
  28.  
  29. #include "msg menus.h"
  30. #include "msg main.h"
  31. #include "msg graphics.h"
  32. #include "msg sounds.h"
  33. #include "msg environment.h"
  34. #include "demo crash.h"
  35. #include "demo help.h"
  36. #include "demo.h"
  37.  
  38. extern    long        menuDisable : 0x0b54;
  39.  
  40. Boolean            gMenuEnabled;
  41. MenuHandle        gAppleMenu;
  42. MenuHandle        gFileMenu;
  43. MenuHandle        gEditMenu;
  44. MenuHandle        gWipesMenu;
  45. MenuHandle        gAdditionsMenu;
  46. MenuHandle        gScrollMenu;
  47. MenuHandle        gFluffMenu;
  48. MenuHandle        gHelpMenu;
  49. MenuHandle        gCrashMenu;
  50.  
  51. void AdjustMenus(void)
  52. {
  53.     WindowPeek    theWindow;
  54.     int            kind;
  55.     
  56.     theWindow = (WindowPeek)FrontWindow();
  57.     kind = theWindow ? theWindow->windowKind : 0;
  58.     
  59.     if(kind < 0)
  60.     {
  61.         EnableItem(gEditMenu, cutItem);
  62.         EnableItem(gEditMenu, copyItem);
  63.         EnableItem(gEditMenu, pasteItem);
  64.         EnableItem(gEditMenu, clearItem);
  65.     }
  66.     else
  67.     {
  68.         DisableItem(gEditMenu, cutItem);
  69.         DisableItem(gEditMenu, copyItem);
  70.         DisableItem(gEditMenu, pasteItem);
  71.         DisableItem(gEditMenu, clearItem);
  72.     }
  73.     
  74.     if(theWindow)
  75.         EnableItem(gFileMenu, closeItem);
  76.     else
  77.         DisableItem(gFileMenu, closeItem);
  78.     
  79.     if(gMainWindow)
  80.         DisableItem(gFileMenu, openItem);
  81.     else
  82.         EnableItem(gFileMenu, openItem);
  83.     
  84.     if (gDisableQuit)
  85.     {
  86.         DisableItem(gFileMenu, quitItem);
  87.         DisableItem(gFileMenu, disableQuitItem);
  88.         EnableItem(gFileMenu, enableQuitItem);
  89.     }
  90.     else
  91.     {
  92.         EnableItem(gFileMenu, quitItem);
  93.         EnableItem(gFileMenu, disableQuitItem);
  94.         DisableItem(gFileMenu, enableQuitItem);
  95.     }
  96.     if (gLastWipe==-1)
  97.         DisableItem(gFluffMenu, repeatItem);
  98.     else
  99.         EnableItem(gFluffMenu, repeatItem);
  100.     
  101.     CheckItem(gFluffMenu, soundToggle, gSoundToggle&&gSoundAvailable);
  102.     if (gSoundAvailable)
  103.         EnableItem(gFluffMenu, soundToggle);
  104.     else
  105.         DisableItem(gFluffMenu, soundToggle);
  106. }
  107.  
  108. void HandleMenu(long mSelect)
  109. {
  110.     int            menuID = HiWord(mSelect);
  111.     int            menuItem = LoWord(mSelect);
  112.     
  113.     if (menuID==0)
  114.     {
  115.         menuID=HiWord(menuDisable);
  116.         menuItem=LoWord(menuDisable);
  117.         gMenuEnabled=FALSE;
  118.     }
  119.     else gMenuEnabled=TRUE;
  120.     menuDisable=0L;
  121.  
  122.     switch (menuID)
  123.     {
  124.         case appleMenu:
  125.             HandleAppleMenu(menuItem);
  126.             break;
  127.         case fileMenu:
  128.             HandleFileMenu(menuItem);
  129.             break;    
  130.         case editMenu:
  131.             HandleEditMenu(menuItem);
  132.             break;
  133.         case wipesMenu:
  134.             HandleWipesMenu(menuItem);
  135.             break;
  136.         case additionsMenu:
  137.             HandleAdditionsMenu(menuItem);
  138.             break;
  139.         case scrollMenu:
  140.             HandleScrollMenu(menuItem);
  141.             break;
  142.         case helpMenu:
  143.             HandleHelpMenu(menuItem);
  144.             break;
  145.         case fluffMenu:
  146.             HandleFluffMenu(menuItem);
  147.             break;
  148.         case crashMenu:
  149.             HandleCrashMenu(menuItem);
  150.             break;
  151.     }
  152. }
  153.  
  154. void HandleAppleMenu(int menuItem)
  155. {
  156.     GrafPtr        savePort;
  157.     Str255        name;
  158.     
  159.     if(menuItem == 1)
  160.         ShowInformation();
  161.     if (menuItem == 2)
  162.         ShowSplashScreen();
  163.     else if(menuItem > 4)
  164.     {
  165.         GetPort(&savePort);
  166.         GetItem(gAppleMenu, menuItem, name);
  167.         OpenDeskAcc(name);
  168.         SetPort(savePort);
  169.     }
  170. }
  171.  
  172. void HandleFileMenu(int menuItem)
  173. {
  174.     WindowPtr            theWindow;
  175.     int                    i;
  176.     
  177.     switch (menuItem)
  178.     {
  179.         case openItem:
  180.             if (gMenuEnabled)
  181.                 OpenMainWindow();
  182.             else
  183.                 DoSound(sound_fluff, TRUE);
  184.             break;
  185.         case closeItem:
  186.             if (gMenuEnabled)
  187.             {
  188.                 theWindow=FrontWindow();
  189.                 for (i=0; i<NUM_HELP; i++)
  190.                     if (theWindow == gHelp[i])
  191.                         gHelp[i]=0L;
  192.                 
  193.                 if(theWindow == gMainWindow)
  194.                     CloseMainWindow();
  195.                 else
  196.                     DisposeWindow(theWindow);
  197.                 
  198.                 AdjustMenus();
  199.             }
  200.             else DoSound(sound_fluff, TRUE);
  201.             break;
  202.         case disableQuitItem:
  203.             if (gMenuEnabled)
  204.             {
  205.                 gDisableQuit=TRUE;
  206.                 AdjustMenus();
  207.             }
  208.             else DoSound(sound_fluff, TRUE);
  209.             break;
  210.         case enableQuitItem:
  211.             if (gMenuEnabled)
  212.             {
  213.                 gDisableQuit=FALSE;
  214.                 AdjustMenus();
  215.             }
  216.             else DoSound(sound_fluff, TRUE);
  217.             break;
  218.         case quitItem:
  219.             gDone = TRUE;
  220.             break;
  221.     }
  222. }
  223.  
  224. void HandleEditMenu(int menuItem)
  225. {
  226.     if ((menuItem>0) && (menuItem!=2))
  227.     {
  228.         if (gMenuEnabled)
  229.             SystemEdit(menuItem - 1);
  230.         else DoSound(sound_fluff, TRUE);
  231.     }
  232. }
  233.  
  234. void HandleWipesMenu(int menuItem)
  235. {
  236.     if (gMenuEnabled)
  237.     {
  238.         gWhichWipe=menuItem;
  239.         OpenMainWindow();
  240.     }
  241. }
  242.  
  243. void HandleAdditionsMenu(int menuItem)
  244. {
  245.     if (gMenuEnabled)
  246.     {
  247.     gWhichWipe=menuItem+13;
  248.     OpenMainWindow();
  249.     }
  250. }
  251.  
  252. void HandleScrollMenu(int menuItem)
  253. {
  254.     if (gMenuEnabled)
  255.     {
  256.     gWhichWipe=menuItem+24;
  257.     OpenMainWindow();
  258.     }
  259. }
  260.  
  261. void HandleHelpMenu(int menuItem)
  262. {
  263.     if ((menuItem>0) && (menuItem<=NUM_HELP))
  264.     {
  265.         OpenHelpWindow(menuItem-1);
  266.         SelectWindow(gHelp[menuItem-1]);
  267.     }
  268. }
  269.  
  270. void HandleFluffMenu(int menuItem)
  271. {
  272.     switch (menuItem)
  273.     {
  274.         case repeatItem:
  275.             if (gMenuEnabled)
  276.             {
  277.                 gWhichWipe=gLastWipe;
  278.                 OpenMainWindow();
  279.             }
  280.             else
  281.                 DoSound(sound_fluff, TRUE);
  282.             break;
  283.         case soundToggle:
  284.             if (gMenuEnabled)
  285.             {
  286.                 gSoundToggle=!gSoundToggle;
  287.                 SaveThePrefs();
  288.                 DoSound(sound_on, TRUE);
  289.             }
  290.             break;
  291.     }
  292. }
  293.  
  294. void HandleCrashMenu(int menuItem)
  295. {
  296.     if (menuItem>0)
  297.         CrashAndBurn(menuItem);
  298. }
  299.